'use strict';
const Service = require('egg').Service;

// ERC20标准合约共用
class Erc20Service extends Service {
  // 获取ERC20 Token的余额
  // 参数1: 合约对象
  // 参数2: 地址
  // 返回值: 字符串类型的数字
  async balanceOf2(contract, address) {
    const { app, ctx, service } = this;
    const res = await contract.methods.balanceOf(address).call();
    return ctx.helper.hexToDec(res.balance._hex);
  }

  // 查询授权了多少Token给某个地址
  // 参数1: 合约对象
  // 参数2: 授权方的地址
  // 参数3: 被授权方的地址
  // 返回值: 字符串类型的数字
  async allowance2(contract, owner, spender) {
    const { app, ctx, service } = this;
    const res = await contract.methods.allowance(owner, spender).call();
    return ctx.helper.hexToDec(res.remaining._hex);
  }

  // 查询这个地址的精度
  // 参数1: erc20合约地址
  async decimals2(erc20Address) {
    const { app, ctx, service } = this;
    const erc20Abi = app.Init.erc20Abi;
    const erc20Contract = await app.BSC.Web3.contract(erc20Abi, erc20Address);
    return await erc20Contract.methods.decimals().call();
  }

}

module.exports = Erc20Service;
